VIM 替换功能 数字增减

1 背景知识

想要把所有的标题序号进行增减,可以使用 %s 命令进行替换。具体方法是匹配到数字部分,然后用 submatch 行函数对数字进行增减。

1.1 submatch({nr}) 函数

,只用于 :substitute 命令或 substitute() 函数中。它将返回匹配文本的第{nr}个子匹配。如果{nr}为0,则返回整个匹配文本。

1.2 环境准备

准备一段 html 文本如下,放入在 vim 编辑器内。

<h2>Heading number 1</h2>
<h3>Number 2 heading</h3>
<h4>Another heading</h4>

2 所有数字减一

2.1 完整匹配表达式

%s/\v\<\/?h\zs\d/\=submatch(0)-1/g

3 表达式详解

\/v\<\/?h\zs\d

以下是表达式说明:

字符 说明
< 匹配字符: <
/? 匹配一个或0 个字符: /
h 原意匹配字符: h
\zs 开始匹配表示某一行必须按照以上顺序匹配。
\d 匹配一个数字。